Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

295
Views
Is "reformat" of multi-dimensional array by pointer to incomplete array type allowed in C?

Consider following declaration:

int a[M][N]; // M and N are known compile-time

Would it be legal to treat it like as it was declared as:

int a[N][M];

or even:

int a[A][B]; // where A * B = M * N

in C without breaking its rules (badly)?

I found that it can be acomplished without any cast:

#include <stdio.h>

void print_array(int a[][2], int n);

int main(void)
{
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};

    //int (*p1)[2] = a; // compile error

    int (*ptr_temp)[] = a; // pointer to array of incomplete type
    int (*p2)[2] = ptr_temp; // compiles without any warning

    print_array(p2, 3);
}

void print_array(int a[][2], int n)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < 2; j++)
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
}

Notice that we cannot assign a to p1 pointer directly. However compiler does not complain when p2 is assigned with ptr_temp even if it seems to be potentially dangerous (it does not require any cast for that). Is it really sanitized? If so, then why it disallows the first assignmment?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

The behavior you see is because of the way multidimensional arrays are handled in C.

Have a look at this question Pointer address in a C multidimensional array

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!